home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 3 / DOS077A.dsk / FILE MANAGER.bas < prev    next >
BASIC Source File  |  2012-02-16  |  11KB  |  484 lines

  1. 5  POKE 115,00: POKE 116,150
  2. 10  HIMEM: 38143
  3. 25  PRINT "<CTRL-D> BLOAD FILE MANAGER.X"
  4. 30  GOTO 3000
  5. 100 :
  6. 101  REM  ** SORT DRIVER **
  7. 102 :
  8. 105  POKE 0,C%(J) -1
  9. 106  POKE 1,D%(J) -1
  10. 110 :M% =  INT(X%/256)
  11. 111 :
  12. 115  POKE 2,X% -(M% *256)
  13. 120  POKE 3,M%
  14. 125  CALL 38144
  15. 130  RETURN 
  16. 200 :
  17. 201  REM  ** FIELD SELECT **
  18. 202 :
  19. 205  VTAB 5
  20. 210  INPUT "NUMBER OF FIELDS = ";I
  21. 215  IF I >10  THEN 210
  22. 220  VTAB 8: HTAB 15
  23. 225  PRINT "START FIELD    STOP FIELD"
  24. 230  FOR J = 1 TO I
  25. 235  VTAB 10 +J
  26. 236  PRINT "FIELD  ";J;
  27. 240  HTAB 20: INPUT "";C%(J)
  28. 242  VTAB 10 +J
  29. 245  HTAB 35: INPUT "";D%(J)
  30. 250  IF D%(J) <C%(J)  OR C%(J) <0  OR D%(J) >256  THEN 235
  31. 251 II = II -1
  32. 255  NEXT 
  33. 260  RETURN 
  34. 300 :
  35. 301  REM  ** PRINT ENTRY **
  36. 302 :
  37. 310  FOR I = 1 TO U%
  38. 315  PRINT  MID$ (A$(E),S(I),L(I));Z$;
  39. 320  NEXT : RETURN 
  40. 400 :
  41. 401  REM  ** DELETE **
  42. 402 :
  43. 405 A$(LX%) = "^"
  44. 410 J = 1:C%(1) = 1:D%(1) = L%
  45. 415  GOSUB 100
  46. 420 X% = X% -1
  47. 425  RETURN 
  48. 500 :
  49. 501  REM  ** DETAIL **
  50. 502 :
  51. 505  HOME : INVERSE 
  52. 510  PRINT " DETAIL ";
  53. 515  NORMAL : PRINT "  D=DELET";
  54. 520  PRINT "E  C=CHANGE  /=LIST"
  55. 525  GOSUB 1300: GOSUB 1500
  56. 530 K = 3: GOSUB 900
  57. 535  ON L GOSUB 400,1600,540
  58. 540 L = 1: RETURN 
  59. 600 :
  60. 601  REM  ** LIST PRINT **
  61. 602 :
  62. 603  IF P1 = 1  THEN  PRINT "<CTRL-D>PR#1"
  63. 605  VTAB 1: HTAB 38: CALL  -958
  64. 607 OFFSET = (Q% *(P% -1))
  65. 610  PRINT P%: VTAB 3
  66. 611  FOR J = 1 TO Q%
  67. 612  IF SEL = 0  THEN 619
  68. 616 E = SE(J +OFFSET)
  69. 617  IF J +OFFSET < = KY  THEN 630
  70. 618  GOTO 625
  71. 619 E = J +OFFSET
  72. 620  IF E < = X%  THEN 627
  73. 625 J = Q%: GOTO 655
  74. 627 :
  75. 630  GOSUB 300
  76. 640  PRINT 
  77. 642  IF P0 = 1  THEN 655
  78. 645  INVERSE : PRINT E: NORMAL 
  79. 655  NEXT :K = 1
  80. 660  GOSUB 900: GOSUB 800
  81. 665  GOTO 605
  82. 700 :
  83. 701  REM  ** LIST HEADER **
  84. 702 :
  85. 705  HOME : INVERSE 
  86. 710  PRINT " LIST ";: NORMAL 
  87. 715  PRINT " <- ->  .= DETAIL";
  88. 720  PRINT "  /=MENU PAGE=1"
  89. 721 M% = 23
  90. 725  RETURN 
  91. 740 :
  92. 750  IF Q% = 0  THEN  GOSUB 1800
  93. 755  GOSUB 700:P% = 1
  94. 760  GOSUB 600: RETURN 
  95. 800 :
  96. 801  REM  ** DIRECTORY **
  97. 802 :
  98. 805  ON L GOTO 810,820,830,850
  99. 810 P% = P% -1
  100. 815  IF P% < = 0  THEN P% = 1
  101. 816  RETURN 
  102. 820 P% = P% +1
  103. 821 E =  INT(X%/Q%)
  104. 822  IF E = (X%/Q%)  THEN E = E -1
  105. 825  IF P% >E +1  THEN P% = 1
  106. 826  RETURN 
  107. 830  VTAB 1: HTAB 8: CALL  -868
  108. 835  INVERSE : PRINT " DETAIL OF RECORD NUMBER? ";: NORMAL 
  109. 840  INPUT " ";LX%
  110. 845  GOSUB 500: GOSUB 700
  111. 847  RETURN 
  112. 850  PRINT : PRINT "<CTRL-D>PR#0"
  113. 860  POP : RETURN 
  114. 900 :
  115. 901  REM  ** CONTROL **
  116. 902 :
  117. 903  IF K >4  THEN 905
  118. 904 H = 1:V = H
  119. 905 L = 0: HTAB H: VTAB V: GET Q$
  120. 910 L = L +1
  121. 912  IF L > LEN(B$(K))  THEN 905
  122. 915  IF Q$ < > MID$ (B$(K),L,1)  THEN 910
  123. 920  RETURN 
  124. 1000 :
  125. 1001  REM   ** DEFINE HEADER **
  126. 1002 :
  127. 1003  HOME 
  128. 1005  INPUT "NUMBER FIELDS  ";Q
  129. 1010  DIM G%(Q +1),G$(Q)
  130. 1020  VTAB 3: HTAB 12
  131. 1025  PRINT "FIELD DESCRIPTION"
  132. 1030  INVERSE : VTAB 5
  133. 1035  PRINT "START";: HTAB 7
  134. 1036  PRINT "PICTURE";: HTAB 15
  135. 1040  PRINT "LENGTH";: HTAB 23
  136. 1045  PRINT "     CAPTION      "
  137. 1050  NORMAL :I = 1
  138. 1055  FOR J = 1 TO Q
  139. 1060 K1 = J +6: VTAB K1: PRINT I;
  140. 1061  GOTO 2400
  141. 1065  HTAB 15: INPUT "";G%(J)
  142. 1070  VTAB K1: HTAB 23: INPUT "";G$(J)
  143. 1075 I = I +G%(J) +1: NEXT 
  144. 1080 L% = I
  145. 1081  HOME 
  146. 1085  RETURN 
  147. 1100 :
  148. 1101  REM  ** REFORMAT **
  149. 1102  REM  **  HEADER  **
  150. 1103 :
  151. 1105  FOR J = 1 TO Q
  152. 1110  IF  LEN(G$(J)) <G%(J)  THEN 1125
  153. 1115 G$(J) =  LEFT$(G$(J),G%(J))
  154. 1120  GOTO 1150
  155. 1125 Y$ = "                                       "
  156. 1126 YZ = G%(J): IF G%(J) >39  THEN YZ = 39
  157. 1130 L = (YZ - LEN(G$(J)))/2
  158. 1131  IF L <1  THEN 1150
  159. 1135 E$ =  LEFT$(Y$,L)
  160. 1140 G$(J) = E$ +G$(J) +E$
  161. 1145  IF  LEN(G$(J)) <G%(J)  THEN G$(J) = G$(J) +" "
  162. 1150 G%(J) = G%(J) +1
  163. 1160  NEXT J
  164. 1170  RETURN 
  165. 1200 :
  166. 1201  REM  ** ENTER **
  167. 1202 :
  168. 1203  HOME : INVERSE 
  169. 1204  PRINT " ADD ";: NORMAL 
  170. 1205  PRINT "  /= MENU   .= CONTINUE "
  171. 1209 X% = X% +1:LX% = X%
  172. 1210  GOSUB 1300: GOSUB 2000
  173. 1215  IF X% =  >MAX  THEN  STOP 
  174. 1220 A$(X%) = B$
  175. 1225 J = 1:C%(1) = 1:D%(1) = L%
  176. 1230  GOSUB 100
  177. 1231  PRINT "<CTRL-G>"
  178. 1235 K = 4: GOSUB 900
  179. 1240  ON L GOTO 1200,1245
  180. 1245  RETURN 
  181. 1300 :
  182. 1301  REM  ** PRINT HEADER **
  183. 1302 :
  184. 1305 J = 1:M% = 3:IO = 1
  185. 1310  FOR I = 1 TO Q
  186. 1315 K = G%(I)
  187. 1320  IF G%(I) >39  THEN K = 39
  188. 1325 J = J +K
  189. 1330  IF J >41  THEN  GOSUB 1400
  190. 1335  NEXT 
  191. 1340  IF J < = 41  THEN  GOSUB 1400
  192. 1345  RETURN 
  193. 1400 :
  194. 1405  FOR L = IO TO I -1
  195. 1410  INVERSE : VTAB M%
  196. 1415  PRINT G$(L);: NORMAL 
  197. 1420  PRINT " ";: NEXT 
  198. 1425 IO = I:J = K:M% = M% +4
  199. 1430  HTAB 1: RETURN 
  200. 1500 :
  201. 1501  REM  ** PRINT DETAIL **
  202. 1502 :
  203. 1505 K = 1:J = 1:M% = 4
  204. 1510  FOR I = 1 TO Q
  205. 1520  VTAB M%: HTAB J
  206. 1530  PRINT  MID$ (A$(LX%),K,G%(I))
  207. 1540 J = J +G%(I):K = K +G%(I)
  208. 1550  IF J +G%(I +1) <41  THEN 1570
  209. 1560 M% = M% +4:J = 1
  210. 1570  NEXT : RETURN 
  211. 1600 :
  212. 1601  REM  ** CHANGE **
  213. 1602 :
  214. 1605  HOME : INVERSE 
  215. 1610  PRINT " CHANGE ": NORMAL 
  216. 1615  GOSUB 1300: GOSUB 2000
  217. 1620  GOSUB 400:X% = X% +1
  218. 1625 A$(X%) = B$
  219. 1630 J = 1:C(1) = 1:D%(1) = L%
  220. 1635  GOSUB 100: RETURN 
  221. 1800 :
  222. 1801  REM  ** PRINT CONTROL **
  223. 1802 :
  224. 1805  HOME : PRINT "PRINT CONTROL"
  225. 1810  GOSUB 200
  226. 1815  FOR J = 1 TO I
  227. 1820 S(J) = C%(J)
  228. 1821 L(J) = D%(J) -C%(J)
  229. 1825  NEXT :U% = I
  230. 1826  PRINT : PRINT : PRINT 
  231. 1830  INPUT "NUMBER OF LINES PER PAGE = ";V%
  232. 1831  CALL  -922
  233. 1832  INPUT "NUMBER OF LINES PER ENTRY = ";N%
  234. 1835 Q% =  INT(V%/N%) -1
  235. 1836  CALL  -922
  236. 1840  PRINT "NUMBER ENTRIES ? .=YES,  /=NO  "
  237. 1845 K = 4: GOSUB 900
  238. 1850  IF L = 2  THEN P0 = 1
  239. 1855  IF L = 1  THEN P0 = 0
  240. 1860  RETURN 
  241. 1900 :
  242. 1901  REM  ** SORT CONTROL **
  243. 1902 :
  244. 1905  HOME 
  245. 1910  PRINT "SORT CONTROL"
  246. 1915  GOSUB 200
  247. 1920  FOR J = I TO 1
  248. 1925  GOSUB 100: NEXT : RETURN 
  249. 2000 :
  250. 2001  REM  ** ENTER RECORD **
  251. 2002 :
  252. 2003 K = 1
  253. 2005 J = 1:M% = 4:B$ = ""
  254. 2010  FOR I = 1 TO Q
  255. 2011  VTAB M%: HTAB J
  256. 2012  PRINT  MID$ (A$(LX%),K,G%(I))
  257. 2015  VTAB M%: HTAB J
  258. 2016  IF N1$(I) = "9"  THEN 2300
  259. 2019  INPUT "";C$
  260. 2020 LN =  LEN(C$)
  261. 2025  IF LN > = G%(I)  THEN 2015
  262. 2026  IF LN = G%(I)  THEN 2030
  263. 2027 E$ =  LEFT$(Y$,G%(I) -LN)
  264. 2028 C$ = C$ +E$
  265. 2030 J = J +G%(I):B$ = B$ +C$
  266. 2031 K = K +G%(I)
  267. 2035  IF J +G%(I +1) <41  THEN 2045
  268. 2040 M% = M% +4:J = 1
  269. 2045  NEXT 
  270. 2050  RETURN 
  271. 2100 :
  272. 2101  REM  ** SELECT **
  273. 2102 :
  274. 2105  HOME : INPUT "STARTING POSITION = ";XX
  275. 2110  INPUT "STRING = ";XX$
  276. 2111 YX =  LEN(XX$)
  277. 2112 KY = 0:SEL = 1
  278. 2115  FOR J = 1 TO X%
  279. 2120  IF  MID$ (A$(J),XX,YX) < >XX$  THEN 2125
  280. 2121 KY = KY +1:SE(KY) = J
  281. 2125  NEXT : RETURN 
  282. 2200 :
  283. 2201  REM   ** DESELECT ** 
  284. 2202 :
  285. 2205 SEL = 0: RETURN 
  286. 2290  HOME : VTAB 10: HTAB 20
  287. 2295 X6 = 10:X5 = 6
  288. 2300 :
  289. 2301  REM  ** NUMBER INPUT **
  290. 2302 :
  291. 2303 X6 = N3(I):X5 = N2(I)
  292. 2304 W$ = ""
  293. 2305 X0 =  PEEK(36) +1
  294. 2310 X2 = X0 +X5: HTAB X2
  295. 2315  GET C$:X3 =  ASC(C$)
  296. 2320  IF X3 < >13  THEN 2325
  297. 2321  GOSUB 2340: GOTO 2380
  298. 2325  IF X3 < >46  THEN 2330
  299. 2326  GOSUB 2340: GOTO 2360
  300. 2330 W$ = W$ +C$:X2 = X2 -1
  301. 2335  HTAB X2: PRINT W$;
  302. 2336  GOTO 2315
  303. 2340 I1 = X5 - LEN(W$)
  304. 2341  IF I1 = 0  THEN 2355
  305. 2345  FOR J1 = 1 TO I1
  306. 2350 W$ = " " +W$: NEXT 
  307. 2355 W$ = W$ +".": RETURN 
  308. 2360  HTAB X0: PRINT W$;
  309. 2365  GET C$:X3 =  ASC(C$)
  310. 2370  IF X3 = 13  THEN 2380
  311. 2375 W$ = W$ +C$: GOTO 2360
  312. 2380 I1 = X6 - LEN(W$)
  313. 2381  IF I1 = 0  THEN 2391
  314. 2385  FOR J1 = 1 TO I1
  315. 2390 W$ = W$ +"0": NEXT 
  316. 2391 W$ = W$ +" "
  317. 2392  INVERSE 
  318. 2395  HTAB X0: PRINT W$
  319. 2396  NORMAL 
  320. 2397 C$ = W$: GOTO 2030
  321. 2400 :
  322. 2401  REM  ** PICTURE **
  323. 2402 :
  324. 2405 V = K1:H = 7:K = 5: GOSUB 900
  325. 2410 N1$(J) = Q$: PRINT Q$;
  326. 2415  IF L = 1  THEN 1065
  327. 2420 H = 15:K = 6: GOSUB 900
  328. 2425 N2(J) = L: PRINT L;".";
  329. 2430 H = 17: GOSUB 900
  330. 2435  PRINT L:N3(J) = L +N2(J) +1
  331. 2440 G%(J) = N3(J)
  332. 2445  GOTO 1070
  333. 2500 :
  334. 2501  REM  ** TOTAL **
  335. 2502 :
  336. 2505  FOR J = 1 TO X%
  337. 2510  IF SE(J) = 1  THEN 2525
  338. 2515 I =  VAL( MID$ (A$(J),C%(1),D%(1) -C%(1)))
  339. 2520 K = K +I
  340. 2525  NEXT 
  341. 2530  VTAB 5: HTAB 1: PRINT K
  342. 2535  RETURN 
  343. 2550 I = 1: HOME : INVERSE 
  344. 2555  PRINT " TOTAL ";: NORMAL 
  345. 2560  PRINT " /= MENU  .= CONTINUE "
  346. 2564  GOSUB 220: GOSUB 2500
  347. 2566  VTAB 12: PRINT "TOTAL = ";K
  348. 2570 K = 4: GOSUB 900
  349. 2575  ON L GOTO 2550
  350. 2580  RETURN 
  351. 3000 :
  352. 3001  REM  ** INITIAL **
  353. 3002 :
  354. 3005  DIM A$(300)
  355. 3010  DIM SE(300)
  356. 3015 MAX = 300
  357. 3020 B$(1) =  CHR$(8) + CHR$(21) +"./"
  358. 3025 B$(2) = "123456789A"
  359. 3030 B$(3) = "DC/"
  360. 3035 B$(4) = "./"
  361. 3040 B$(5) = "X9"
  362. 3045 B$(6) = "1234567890"
  363. 3050 Y$ = "                    "
  364. 3055 U% = 1:S(1) = 1:L(1) = L%
  365. 3060 N% = 2:V% = 23
  366. 3065  GOTO 3200
  367. 3100 :
  368. 3101  REM  ** MAIN MENU **
  369. 3102 :
  370. 3105  HOME : INVERSE 
  371. 3110  PRINT " MAIN MENU "
  372. 3115  NORMAL : VTAB 4
  373. 3120  PRINT "1.  ADD"
  374. 3125  PRINT "2.  LIST"
  375. 3130  PRINT "3.  SORT"
  376. 3135  PRINT "4.  SELECT"
  377. 3140  PRINT "5.  DESELECT"
  378. 3145  CALL  -922
  379. 3150  PRINT "6.  TOTAL"
  380. 3155  PRINT "7.  FORMAT"
  381. 3160  PRINT "8.  FILE OUTPUT"
  382. 3165  CALL  -922
  383. 3170  PRINT "9.  STOP"
  384. 3175  CALL  -922: CALL  -922
  385. 3180  PRINT "NUMBER OF RECORDS = ";X%
  386. 3185  CALL  -922
  387. 3190  GOSUB 8000
  388. 3195 K = 2: GOSUB 900: HOME 
  389. 3196  ON L GOSUB 1200,750,1900,2100,2200,2550,1800,7000,3198,8010
  390. 3197  GOTO 3100
  391. 3198 R% = 1: GOSUB 6000: END 
  392. 3200 :
  393. 3201  REM  ** FILE QUESTION **
  394. 3202 :
  395. 3205  HOME 
  396. 3210  PRINT "FILE MANAGER"
  397. 3215  VTAB 5
  398. 3220  INPUT "FILE NAME = ";M$
  399. 3225  VTAB 7
  400. 3226  INPUT "HEADER NAME = ";N$
  401. 3227  VTAB 10
  402. 3230  PRINT "IS THIS A NEW FILE (Y/N) ";
  403. 3235  GET Q$: PRINT 
  404. 3240  IF Q$ < >"Y"  AND Q$ < >"N"  THEN 3225
  405. 3245  IF Q$ = "Y"  THEN 3300
  406. 3255 R% = 2: GOSUB 5000: GOSUB 1100
  407. 3256 L(1) = L%
  408. 3257  IF L% >39  THEN L(1) = 39
  409. 3258 N$ = M$
  410. 3260 R% = 1: GOSUB 5000
  411. 3265  GOTO 3100
  412. 3300  GOSUB 1000:R% = 2
  413. 3305  GOSUB 6000: GOSUB 1100
  414. 3310 N$ = M$: GOTO 3100
  415. 5000 :
  416. 5001  REM   ** READ RECORD **
  417. 5002 :
  418. 5005  PRINT "<CTRL-D>OPEN ";N$
  419. 5010  PRINT "<CTRL-D>READ ";N$
  420. 5015  ON R% GOSUB 5100,1000
  421. 5020  PRINT "<CTRL-D>CLOSE ";N$
  422. 5025  RETURN 
  423. 5100 :
  424. 5101  REM   ** READ RECORD **
  425. 5102 :
  426. 5105  INPUT X%
  427. 5110  FOR J = 1 TO X%
  428. 5115  INPUT A$(J): NEXT 
  429. 5120  RETURN 
  430. 5125  NEXT : RETURN 
  431. 6000 :
  432. 6001  REM   ** WRITE FILE **
  433. 6002 :
  434. 6003  PRINT 
  435. 6005  PRINT "<CTRL-D>OPEN ";N$
  436. 6010  PRINT "<CTRL-D>WRITE ";N$
  437. 6015  ON R% GOSUB 6100,6200,7100
  438. 6020  PRINT "<CTRL-D>CLOSE ";N$
  439. 6025  RETURN 
  440. 6100 :
  441. 6101  REM   ** WRITE RECORD **
  442. 6102 :
  443. 6105  PRINT X%
  444. 6110  FOR J = 1 TO X%
  445. 6115  PRINT A$(J): NEXT 
  446. 6120  RETURN 
  447. 6200 :
  448. 6201  REM  ** WRITE HEADER **
  449. 6202 :
  450. 6203  PRINT Q
  451. 6205  FOR J = 1 TO Q
  452. 6210  PRINT N1$(J)
  453. 6212  IF N2(J) < >0  THEN 6230
  454. 6215  PRINT G%(J)
  455. 6220  GOTO 6240
  456. 6230  PRINT N2(J)
  457. 6235  PRINT N3(J) -N2(J) -1
  458. 6240  PRINT G$(J)
  459. 6245  NEXT 
  460. 6250  RETURN 
  461. 7000 :
  462. 7001  REM  ** OUTPUT FILE **
  463. 7002  REM  ** REORGANIZED **
  464. 7003 :
  465. 7005  HOME : INPUT "NEW FILE NAME = ";M$
  466. 7010 R% = 3:TE$ = N$:N$ = M$
  467. 7015  GOSUB 6000
  468. 7020  GOSUB 6100
  469. 7025 N$ = TE$: RETURN 
  470. 7100 :
  471. 7101  REM  ** REORGANIZED **
  472. 7102  REM  ** FILE PRINT  **
  473. 7103 :
  474. 7104  PRINT X%
  475. 7105  FOR J = 1 TO X%
  476. 7110  GOSUB 300
  477. 7125  PRINT : NEXT : RETURN 
  478. 8000  VTAB 4: HTAB 20
  479. 8001  IF P1 = 1  THEN  INVERSE 
  480. 8002  PRINT "A.  PRINTER"
  481. 8003  NORMAL 
  482. 8005  RETURN 
  483. 8010 P1 =   NOT (P1)
  484. 8015  RETURN